package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOTipoMoneda;
import pe.com.cotelasa.scp.dominio.service.IServicioTipoMoneda;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.common.ResultadoValidacion;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.entidad.TipoMoneda;

/**
 * @author zer0
 */
@Service
public class ServicioTipoMonedaImpl implements IServicioTipoMoneda, Serializable {

    private static final long serialVersionUID = -3899534497036527682L;
    @Inject
    private IDAOTipoMoneda daoTipoMoneda;

    @Override
    public Collection<TipoMoneda> listarTipoMonedasActivos() throws ServiceException {
//        try {
//            return daoTipoMoneda.listarActivos(TipoMoneda.class);
//        } catch (DAOException ex) {
//            throw new ServiceException(ex.getMessage(), ex);
//        }
        
         try {
            return daoTipoMoneda.listarActivos(TipoMoneda.class);
        } catch (DAOException ex) {
            ex.printStackTrace();
        }
         return null;
    }

    @Override
    public Collection<TipoMoneda> listarTodosTipoMonedas() throws ServiceException {
        try {
            return daoTipoMoneda.listarTodos(TipoMoneda.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoValidacion validarTipoMoneda(TipoMoneda tipoMoneda) throws ServiceException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public ResultadoServicio guardarTipoMoneda(TipoMoneda tipoMoneda) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            //tipoMoneda.setId(5);
            tipoMoneda.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            daoTipoMoneda.insertar(tipoMoneda);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public TipoMoneda conseguirTipoMonedaPorId(Integer idTipoMoneda) throws ServiceException {
        try {
            return daoTipoMoneda.obtenerEntidadPorId(TipoMoneda.class, idTipoMoneda);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoServicio actualizarTipoMoneda(TipoMoneda tipoMoneda) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            daoTipoMoneda.actualizar(tipoMoneda);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public Collection<TipoMoneda> listarTipoMonedasPorFiltro(TipoMoneda tipoMoneda) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("nombre", tipoMoneda.getNombre());
            parametro.put("estadoRegistro", "A");
            return daoTipoMoneda.obtenerColeccionEntidadPorFiltros(TipoMoneda.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    
    @Override
    public TipoMoneda buscarMonedaPorNombre(String tipoMoneda) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("nombre", tipoMoneda);
            parametro.put("estadoRegistro", "A");
            return ((List<TipoMoneda>)daoTipoMoneda.obtenerColeccionEntidadPorFiltros(TipoMoneda.class, parametro)).get(0);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
}
